<?php

declare(strict_types=1);

namespace DreamCat\StateMachine\StateInterface;

use DreamCat\StateMachine\Popo\MachineData;
use DreamCat\StateMachine\Popo\PreConditionFailResult;

/**
 * 状态转移动作的前置条件检查
 * @author vijay
 */
interface PreConditionInterface
{
    /**
     * 是否可以执行转移动作
     * @param MachineData $machineData 状态机数据
     * @param string $to 目标状态，如果是条件转移，此字段为空字符串
     * @param string $action 触发动作
     * @return PreConditionFailResult|null 成功返回null
     */
    public function canTransfer(MachineData $machineData, string $to, string $action): ?PreConditionFailResult;
}

# end of file
